[[# Arithmetic circuits

2.1 Encoding the trace as arithmatic constraints

R1CS

  • **Flattening:将电路的执行转换成计算轨迹,**即将复合函数以乘法为基本单元拆解成一组有序的简单函数,其中
    • , 为输出变量,为左输入变量,为右输入变量
    • 这里的有序是指按电路执行的顺序
    • 这里会引入中间变量
      • 除了根节点处的门之外,其它的门的输出引脚添加对应的中间变量
      • 除了叶子节点处的门之外,其他的门的输入引脚添加中间变量,该中间变量来自于另一个门的输出
      • 举例说明:若门A的输出引脚接入到门B的输入引脚,则为门A的输出引脚和门B的输入引脚添加同一个中间变量
  • 重组中的数据:将其变成一阶约束系统R1CS:(注: 为Hadamard product,按位乘法):
    • ,即由表示1的冗余变量,函数输出,输入变量,中间变量构成的集合对应的向量。
    • 的输出变量基于的选择向量构成的矩阵
    • 的左输入变量基于的选择向量构成的矩阵
    • 的右输入变量基于的选择向量构成的矩阵
  • 注:矩阵的行数等于乘法门的数量,矩阵的列数等于中元素的数量,即变量的数量

Plonkish Arithmetization

  • **Flattening:**即将复合函数拆解成一组离散的门,其中
    • 为输出变量,为左输入变量,为右输入变量,为常量,为输出选择器,为左输入变量选择器,为右输入变量选择器,为乘积选择器,为常数选择器
    • **注:**矩阵的行数等于所有门的数量,即约束的数量,n。
    • 这里的有序是指计算的顺序
    • 这里会引入中间变量
      • 除了根节点处的门之外,其它的门的输出引脚添加对应的中间变量
      • 除了叶子节点处的门之外,其他的门的输入引脚添加中间变量,该中间变量来自于另一个门的输出
      • 举例说明:若门A的输出引脚接入到门B的输入引脚,则为门A的输出引脚和门B的输入引脚添加同一个中间变量
  • **重组中的数据:**将其变成:(注: 为Hadamard product,按位乘法)
    • ,即选择器矩阵
    • ,即变量矩阵
    • 轮换置换后得到的位置集合,来自于Wiring
  • Wiring(Copy Constraints)
    • 分析:Wiring即将离散的门连接起来,即某一个门的输出引脚要接入另一个门的输入引脚约束变量矩阵中某几个位置的元素是相等的这一个元素出现在矩阵的多个位置处

    • Wiring实现思路:

      • 矩阵中的每一个位置从1到3n进行唯一编号,则所有的编号构成一个位置集合,将位置集合对应的元素取出构成一个multiset
      • 把每个元素出现在中的位置编号取出放在一个集合中,即一个元素对应一个位置集合。将位置集合对应的元素取出构成一个multiset 。所有元素的的并集即为的并集为
      • ,要使得 中元素全部相等

      与其进行轮换置换后得到的集合在Multiset的意义上是等价的

      在Multiset的意义上是等价的

      为所有的并集,为所有的并集,为所有的并集, 在Multiset的意义上是等价的

      ,取随机数,有

      • 至此,问题转化成如何证明连乘等式 ,即证明一个n步递归,

        • 初始值:
        • 递归定义:
        • 终止条件:

        则有

        所有 构成向量

        • 至此,Wiring转化成三个约束
          • 即约束向量的指定位的值为k,即约束的第1位()的值为1,第n+1位()的值为

            为n维向量空间的标准基的第i个基向量,向量的第位为等价于:

2.2 Constraints Merge

R1CS to QAP

  • 带有Hadamard product运算的n维向量的群,和带有乘法运算的在上的最高项次数不大于n-1的单变量多项式的群,映射:,令,有,是群同态

  • , 至此,完成了从R1CS到QAP到转换

Plonkish Arithmetization to QAP

Plonkish Arithmetization包含两部分约束:

第一部分约束每个门是正确计算的,即所谓算术约束;第二部分约束门与门之间正确连接,即所谓复制约束。

首先来转换算术约束:

  • 带有加法的n维向量的群,和带有加法的在上的最高项次数不大于n-1的单变量多项式的群,映射:,令,有$h(\vec m)= \langle \vec m,\vec L(X) \rangleLemma5:由Lemma1,Lemma4,Lemma5,有\vec{q_O}\circ \vec{w}=\vec{q_L}\circ\vec{u}+\vec{q_R}\circ\vec{v}+\vec{q_M}\circ(\vec{u}\circ\vec{v})+\vec{q_C}\circ\vec{c} \\ \iff \langle \vec q_O,\vec L(X) \rangle \cdot \langle \vec w,\vec L(X) \rangle=\langle \vec q_L,\vec L(X) \rangle \cdot \langle \vec u,\vec L(X) \rangle+\langle \vec q_R,\vec L(X) \rangle \cdot \langle \vec v,\vec L(X) \rangle+\langle \vec q_m,\vec L(X) \rangle \cdot (\langle \vec u,\vec L(X) \rangle\cdot\langle \vec v,\vec L(X) \rangle )+\langle \vec q_C,\vec L(X) \rangle a(X) =\langle \vec a,\vec L(X) \rangleq_O(X)w(X)=q_L(X)u(X)+q_R(X)v(X)+q_M(X)u(X)v(X)+q_C(X)Lemma1\vec e_i \circ \vec r=k\times \vec e_i \\ \iff L_i(X)r(X)=k\times L_i(X) \\ \iff L_i(X)(r(X)-k)=0r_0=1 \iff L_0(X)(r(X)-1)=0 \\ r_n=c \iff L_n(X)(r(X)-c)=0 L_i(X)HLagrange BasisLemma1\vec r_{i}=\vec r_{i-1} \circ \vec b_{i-1} \\ \iff \langle \vec r,\vec L(\omega \cdot X) \rangle =\langle \vec r,\vec L(X) \rangle \cdot \langle \vec b,\vec L(X) \rangle

  • 至此,复制约束转换成了三个多项式约束。

2.3 A function commitment scheme

在2.3中得到了一系列多项式之间的约束,本节我们来看如何实现多项式约束,

令:

\mathcal F:=function\ family\mathbb F_p:= 有限域

对于\mathcal Fsetup(\lambda) \to ppcommit(pp,f,r) \to com_f基于随机数r对f\in \mathcal F的承诺eval(prover \ P,verifier\ V)com_fx\in X,y\in Y:证明f(x)=y,即所谓的将f在点(x,y)处打开P(pp,f,x,y,r) \to 简短证明\piV(pp,com_f,x,y,\pi)\to 接受/拒绝

三类典型的Function Family Commiments

  • Polynominal commitments:次数不大于d的单变量多项式承诺 f(X)\in \mathbb F_p^{(\leq d)} [X]f(X_1,...,X_k)\in \mathbb F_p^{(\leq 1)}[X_1,...,X_K]f_{\vec v}(\vec u)= \left \langle \vec u, \vec v \right \rangle=\sum _{i=1}^nu_iv_i

这三者从上到下,越来越general

PCS: Polynominal Commitment Scheme

适用于次数不大于d的单变量多项式 f(X)\in \mathbb F_p^{(\leq d)} [X]

Some usual PSC

  • Bulletproofs:基于椭圆曲线,verifier的算法复杂度与d成线性相关
  • KZG‘10,Dory’20:基于双线性椭圆曲线
  • Dark’20:基于阶未知的群
  • FRI:基于hash Function

KZG poly-commit scheme

  • 预备知识:阶为p的群\ \mathbb G:=\{1,G,2\cdot G,3\cdot G,...,(p-1)\cdot G\} ,其中,G为生成元setup(\lambda) \to pp\alpha\in \mathbb F_ppp=(H_0=1,H_1=\alpha \cdot G,H_2=\alpha^2 \cdot G,...,H_d=\alpha^d \cdot G)\in \mathbb G^{d+1}\alpha\alpha\alphacommit(pp,f,r) \to com_fcom_f:=f(\alpha)\cdot G \in \mathbb Gf(X)=f_0+f_1X+...+f_dX^d\implies com_f=f_0\cdot 1+f_1\cdot\alpha G+f_2\cdot\alpha^2 G+ ...+f_d\cdot \alpha^dG\iff com_f=f_0\cdot H——1+f_1\cdot H1+...+f_d\cdot H_deval(prover \ P,verifier\ V)f(u)=vf(u)=v\iff u是 \hat f =f-v的根\iff (X-u)整除\hat f\iff \exists q\in \mathbb{F}_p[X]\ \ s.t.\ \ q(X)\cdot(X-u)=f(X)-vProver(pp,f,u,v)商多项式q(X) 及其承诺com_qVerifier(pp,com_f,u,v)(\alpha-u)\cdot com_q=com_f-v\cdot G\alpha\alpha(\alpha-u)\cdot com_q=com_f-v\cdot Gcom_q和com_f\alpha(\alpha-u)setup(\lambda) \to pp\alpha\in \mathbb F_ppp=(H_0=1,H_1=\alpha \cdot G,H_2=\alpha^2 \cdot G,...,H_d=\alpha^d \cdot G)\in \mathbb G^{d+1} + (T_0=1,T_1=\alpha \cdot G_2) \in \mathbb G_2^1\alpha\alpha\alphaVerifier(pp,com_f,u,v)e\in \mathbb G \times \mathbb G_2 \to \mathbb G_X$ - 至此,将原来需要验证的,转换成了 在上验证

2.4 Polynominal IOP

Useful Lemma

  • Lemma1: Schwartz zipple定理

  • Lemma2: 单位根和乘法子群**:**

    为k次单位根,即

    乘法子群

    由于单位根的对称性,有

  • Lemma3: 中的元素均为的根,即

    存在商多项式

Poly-IOP可以高效完成的任务

  • Task1 zero-test:证明在H上等于0,即证明H中的元素均为的根
  • Task2 sum-check:证明,即证明在H上全部取值的和等于b
  • Task3 prod-check:证明,即证明在H上全部取值的和等于c

Zero Test on H

  1. Prover 向 Verifier Commit
  2. Verifier 向Prover 发送随机数r
  3. Verifier 检查

参考资料

https://github.com/sec-bit/learning-zkp/blob/develop/plonk-intro-cn/plonk-arithmetization.md

https://www.youtube.com/watch?v=J4pVTamUBvU&list=PLj80z0cJm8QErn3akRcqvxUsyXWC81OGq&index=2

https://github.com/sec-bit/learning-zkp/blob/develop/plonk-intro-cn/plonk-polycom.md ](https://github.com/zkp-co-learning/ZKP/edit/main/%E7%AC%AC%E4%BA%8C%E7%AB%A0.md)https://github.com/zkp-co-learning/ZKP/edit/main/%E7%AC%AC%E4%BA%8C%E7%AB%A0.md](https://github.com/zkp-co-learning/ZKP/edit/main/%E7%AC%AC%E4%BA%8C%E7%AB%A0.md)https://github.com/zkp-co-learning/ZKP/edit/main/%E7%AC%AC%E4%BA%8C%E7%AB%A0.md